From bcac378e4bebae89fb1bb5a602ab77a9e8ff41a4 Mon Sep 17 00:00:00 2001 From: lulz1 Date: Thu, 30 May 2024 16:46:02 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E6=90=BA=E7=A8=8B=E8=B6=85=E6=A0=87?= =?UTF-8?q?=E6=8E=A8=E9=80=81=E5=A2=9E=E5=8A=A0=E9=85=8D=E7=BD=AE=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../supplier/CTripOrderDataAdapter.java | 2 +- .../interfaces/rest/bpm/BPMController.java | 12 ---- .../rest/ctrip/in/CTripNoteController.java | 62 ++++++++++++++++++- .../rest/ctrip/tools/CTripUtils.java | 16 +++++ src/test/java/com/chint/CTripTest.java | 2 +- 5 files changed, 79 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/chint/domain/service/supplier/CTripOrderDataAdapter.java b/src/main/java/com/chint/domain/service/supplier/CTripOrderDataAdapter.java index a86246c8..ef9c7f0e 100644 --- a/src/main/java/com/chint/domain/service/supplier/CTripOrderDataAdapter.java +++ b/src/main/java/com/chint/domain/service/supplier/CTripOrderDataAdapter.java @@ -203,7 +203,7 @@ public class CTripOrderDataAdapter implements OrderDataAdapter { .originId(departCityName.getLocationId()) .destinationId(arriveCityName.getLocationId()) .price(String.valueOf(carBasicInfo.getOrderAmount())) - .selfOrderNo(carBasicInfo.getJouneryID()) + .selfOrderNo(carBasicInfo.getJourneyID()) .outOrderNo(String.valueOf(carBasicInfo.getOrderId())) .orderStatus(translateCarOrderStatus(carBasicInfo.getOrderStatus())) .originOrderStatus(carBasicInfo.getOrderStatus()); diff --git a/src/main/java/com/chint/interfaces/rest/bpm/BPMController.java b/src/main/java/com/chint/interfaces/rest/bpm/BPMController.java index d5f67fce..c6aee4aa 100644 --- a/src/main/java/com/chint/interfaces/rest/bpm/BPMController.java +++ b/src/main/java/com/chint/interfaces/rest/bpm/BPMController.java @@ -78,17 +78,6 @@ public class BPMController { if (SUPPLIER_L_Y_BPM_NAME.equals(bpmBack.getOrderSource())) { List byOrderNo = orderTravelRepository.findByOrderNo(bpmBack.getOrderNo()); String travelNo = byOrderNo.isEmpty() ? "" : byOrderNo.get(0).getTravelNo(); - StrokePushDTO strokePushDTO = new StrokePushDTO(); - Param param = new Param(); - if ("通过".equals(result) || "同意".equals(result)) { - param.setTravelBizOrderNo(travelNo)//同程行程单号 - .setApprovalStatus(2);//1驳回 2通过 - } else { - param.setTravelBizOrderNo(travelNo)//同程行程单号 - .setApprovalStatus(1);//1驳回 2通过 - } - strokePushDTO.setParam(param); - strokeController.strokePush(strokePushDTO); //新审批接口 if (BELONG_SYS_CODE_ANFSSC.equals(bpmBack.getTag()) && "拒绝".equals(bpmBack.getResult())) { @@ -102,7 +91,6 @@ public class BPMController { () -> lyApprovalRequest.pushApprovalSuccess(travelNo).isSuccess(), 0 )); } - } } //记录审批状态 diff --git a/src/main/java/com/chint/interfaces/rest/ctrip/in/CTripNoteController.java b/src/main/java/com/chint/interfaces/rest/ctrip/in/CTripNoteController.java index 8f5140aa..b37f392d 100644 --- a/src/main/java/com/chint/interfaces/rest/ctrip/in/CTripNoteController.java +++ b/src/main/java/com/chint/interfaces/rest/ctrip/in/CTripNoteController.java @@ -5,15 +5,20 @@ import com.chint.application.commands.OrderStatusChangeCommand; import com.chint.application.commands.SupplierCallBackErrorCommand; import com.chint.domain.aggregates.order.OrderDetail; import com.chint.domain.repository.SupplierCallBackLogRepository; +import com.chint.domain.service.SystemDomainService; import com.chint.domain.service.supplier.SupplierService; import com.chint.domain.value_object.SupplierCallbackData; import com.chint.infrastructure.echo_framework.command.Command; +import com.chint.infrastructure.util.DelayDispatch; import com.chint.infrastructure.util.Digest; import com.chint.infrastructure.util.Result; +import com.chint.interfaces.rest.ctrip.CTripAuditRequest; import com.chint.interfaces.rest.ctrip.CTripOrderSearchRequest; import com.chint.interfaces.rest.ctrip.dto.put.CTripStatusNotification; 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.CarQuickOrderInfoEntity; +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.hotel.RefundInfo; import com.chint.interfaces.rest.ctrip.tools.CTripUtils; @@ -30,6 +35,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; +import java.util.Optional; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; @@ -58,9 +64,16 @@ public class CTripNoteController { @Autowired private SupplierCallBackLogRepository supplierCallBackLogRepository; + @Autowired + private SystemDomainService systemDomainService; + + @Autowired + private CTripAuditRequest cTripAuditRequest; + @Autowired public RedisTemplate redisTemplate; + private static final String NO_ETA_AVAILABLE = "暂无"; private Gson gson = new Gson(); @@ -70,7 +83,6 @@ public class CTripNoteController { public Result statusEvent(@RequestBody CTripStatusNotification cTripStatusNotification) { - String json = gson.toJson(cTripStatusNotification); log.info(json); //创建回推日志 @@ -89,6 +101,7 @@ public class CTripNoteController { return Result.Success(ORDER_STATUS_REFUSE_MSG); } + String orderId = cTripStatusNotification.getOrderId(); String putCTripSign = Digest.getPutCTripStatusSign(cTripStatusNotification.getCorpId(), productType, orderStatus, orderId, C_TRIP_REQUEST_SECRET); if (!putCTripSign.equals(cTripStatusNotification.getSign())) { @@ -142,6 +155,18 @@ public class CTripNoteController { SearchOrderResponse response = cTripOrderSearchRequest .searchOrderResponseByOrderId(orderId); + + //如果返回的审批是正确的并且为超标状态 ,那么根据配置来执行是否进行立刻外部审批 + // 如果 orderStatus 为 "Approving2" 才执行以下代码 + if ("Approving2".equals(orderStatus)) { + Optional routeOrderNoOptional = findRouteOrderNoByLegType(legType, response); + routeOrderNoOptional + .filter(routeOrderNo -> !routeOrderNo.isEmpty()) + .map(routeOrderNo -> routeOrderNo.split("-")) + .filter(split -> split.length > 0) + .ifPresent(split -> processImmediateResponse(orderId, legType, split[0])); + } + SupplierCallbackData supplierCallbackData = SupplierCallbackData.of(SUPPLIER_C_TRIP) .data(response) .outOrderStatus(orderStatus) @@ -182,4 +207,39 @@ public class CTripNoteController { } } } + + private Optional findRouteOrderNoByLegType(Integer legType, SearchOrderResponse response) { + try { + return switch (legType) { + case LEG_TYPE_AIRPLANE -> { + FlightOrderInfoEntity flightOrderInfoEntity = response.getItineraryList() + .get(0).getFlightOrderInfoList().get(0); + yield Optional.ofNullable(flightOrderInfoEntity.getBasicInfo().getJourneyID()); + } + case LEG_TYPE_HOTEL -> { + HotelOrderInfoEntity hotelOrderInfoEntity = response.getItineraryList() + .get(0).getHotelOrderInfoList().get(0); + yield Optional.ofNullable(hotelOrderInfoEntity.getJourneyNo()); + } + case LEG_TYPE_TAXI -> { + CarQuickOrderInfoEntity carQuickOrderInfoEntity = response.getItineraryList() + .get(0).getCarQuickOrderInfoList().get(0); + yield Optional.ofNullable(carQuickOrderInfoEntity.getBasicInfo().getJourneyID()); + } + default -> Optional.empty(); + }; + } catch (Exception e) { + e.printStackTrace(); + return Optional.empty(); + } + } + + private void processImmediateResponse(String orderId, Integer legType, String sysCode) { + if (systemDomainService.ifImmediateResponse(sysCode)) { + Integer orderType = CTripUtils.cTripOrderTypeMapByLegType(legType); + CompletableFuture.runAsync(() -> DelayDispatch.attemptToSend( + () -> cTripAuditRequest.auditSuccess(orderId, orderType).getStatus().getSuccess(), 0 + )); + } + } } diff --git a/src/main/java/com/chint/interfaces/rest/ctrip/tools/CTripUtils.java b/src/main/java/com/chint/interfaces/rest/ctrip/tools/CTripUtils.java index 6a20b334..24848ee0 100644 --- a/src/main/java/com/chint/interfaces/rest/ctrip/tools/CTripUtils.java +++ b/src/main/java/com/chint/interfaces/rest/ctrip/tools/CTripUtils.java @@ -11,6 +11,8 @@ import org.apache.commons.lang3.StringUtils; import java.util.List; +import static com.chint.infrastructure.constant.BPMConstant.*; +import static com.chint.infrastructure.constant.BPMConstant.EXCEED_STANDARD_TYPE_CAR; import static com.chint.infrastructure.constant.LegConstant.*; import static com.chint.infrastructure.constant.OrderConstant.*; @@ -300,4 +302,18 @@ public class CTripUtils { !"Approve_A".equals(status) && !"Approve_C".equals(status); } + + + //携程类型映射 + //1:机票;2:酒店;3:火车票;4:用车(接送机/站,国内租车,马上用车,国内包车,汽车票) + public static Integer cTripOrderTypeMapByLegType(Integer legType) { + return switch (legType) { + case LEG_TYPE_TRAIN -> 3; + case LEG_TYPE_HOTEL -> 2; + case LEG_TYPE_AIRPLANE -> 1; + case LEG_TYPE_TAXI -> 4; + default -> 0; // 默认值,如果都不匹配则为0 + }; + } + } diff --git a/src/test/java/com/chint/CTripTest.java b/src/test/java/com/chint/CTripTest.java index 661c9588..45e21542 100644 --- a/src/test/java/com/chint/CTripTest.java +++ b/src/test/java/com/chint/CTripTest.java @@ -246,7 +246,7 @@ public class CTripTest { @Test void search() { BaseContext.setCurrentUser(user); - SearchOrderResponse response = orderSearchRequest.searchOrderResponseByOrderId("31674878596"); + SearchOrderResponse response = orderSearchRequest.searchOrderResponseByOrderId("30398235616"); System.out.println(response); }