同步代码

This commit is contained in:
lulz1 2024-03-01 10:25:18 +08:00
parent 99bd01fe7b
commit 914a4cd959
5 changed files with 90 additions and 55 deletions

10
pom.xml
View File

@ -82,11 +82,11 @@
<version>3.0.3</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>com.authine.cloudpivot</groupId>-->
<!-- <artifactId>cloudpivot-opensdk</artifactId>-->
<!-- <version>1.0</version>-->
<!-- </dependency>-->
<dependency>
<groupId>com.authine.cloudpivot</groupId>
<artifactId>cloudpivot-opensdk</artifactId>
<version>1.0</version>
</dependency>
</dependencies>

View File

@ -26,8 +26,9 @@ import java.time.format.DateTimeFormatter;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
import static com.chint.infrastructure.constant.CommonMessageConstant.ORDER_STATUS_ERROR;
import static com.chint.infrastructure.constant.RouteConstant.ORDER_STATUS_NOT_ORDERED;
import static com.chint.infrastructure.constant.RouteConstant.ORDER_STATUS_PREPARE;
@Service
@ -73,12 +74,20 @@ public class OrderApplicationService {
RouteOrder order = Optional.ofNullable(routeRepository.queryById(addLegData.getRouteId()))
.orElseThrow(() -> new NotFoundException(CommonMessageConstant.NOT_FOUND));
order.reloadStatus();
// if (!order.getOrderStatus().equals(ORDER_STATUS_PREPARE)) {
// throw new OrderException(ORDER_STATUS_ERROR);
// }
List<Leg> legs = processLegData(addLegData.getLegData(), order);
RouteOrder routeOrder = orderDomainService.saveOrder(order);
legs.forEach(leg -> Command.of(LegPrepareCommand.class).legId(leg.getLegId()).sendToQueue());
//异步操作-如果是当前的状态已经进行过匹配那么就要订单同步到供应商一次
if (order.getOrderStatus() >= ORDER_STATUS_NOT_ORDERED) {
CompletableFuture.runAsync(() -> {
Command
.of(LegSyncCommand.class)
.data(SyncLegData.of(routeOrder.getRouteId(), routeOrder.getSupplierName()))
.sendToQueue();
});
}
return routeOrder; // 仅在所有操作完成后保存一次
}
@ -94,6 +103,19 @@ public class OrderApplicationService {
byLegId.setOriginId(legData.getOriginId());
byLegId.setDestinationId(legData.getDestinationId());
legRepository.save(byLegId);
//异步操作-如果是当前的状态已经进行过匹配那么就要订单同步到供应商一次
CompletableFuture.runAsync(() -> {
Long routeId = byLegId.getRouteId();
RouteOrder order = Optional.ofNullable(routeRepository.queryById(routeId))
.orElseThrow(() -> new NotFoundException(CommonMessageConstant.NOT_FOUND)).reloadStatus();
if (order.getOrderStatus() >= ORDER_STATUS_NOT_ORDERED) {
Command
.of(LegSyncCommand.class)
.data(SyncLegData.of(order.getRouteId(), order.getSupplierName()))
.sendToQueue();
}
});
}
private List<Leg> processLegData(LegData legData, RouteOrder order) {

View File

@ -9,4 +9,10 @@ public class SyncLegData {
private Long routeId;
private List<Long> routeIds;
private String supplierName;
public static SyncLegData of( Long routeId,String supplierName){
SyncLegData syncLegData = new SyncLegData();
syncLegData.setSupplierName(supplierName);
syncLegData.setRouteId(routeId);
return syncLegData;
}
}

View File

@ -1,6 +1,9 @@
package com.chint.interfaces.rest.bpm.XNBPM;
import com.authine.cloudpivot.opensdk.CloudpivotOpenClient;
import com.authine.cloudpivot.opensdk.client.impl.JdkHttpClient;
import com.authine.cloudpivot.opensdk.config.CloudpivotEnvConfig;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@ -11,7 +14,7 @@ import static com.chint.infrastructure.constant.BPMConstant.*;
*/
@Service
public class ClientFactory {
// private static CloudpivotOpenClient client;
private static CloudpivotOpenClient client;
private static String XNBPMUrl;
@ -21,15 +24,15 @@ public class ClientFactory {
}
// public synchronized static CloudpivotOpenClient getInstance() {
// if (client == null) {
// synchronized (CloudpivotOpenClient.class) {
// if (client == null) {
// CloudpivotEnvConfig config = new CloudpivotEnvConfig(XNBPMUrl + "/api", CLIENT_ID, CLIENT_SECRET);
// client = new CloudpivotOpenClient(config, new JdkHttpClient());
// }
// }
// }
// return client;
// }
public synchronized static CloudpivotOpenClient getInstance() {
if (client == null) {
synchronized (CloudpivotOpenClient.class) {
if (client == null) {
CloudpivotEnvConfig config = new CloudpivotEnvConfig(XNBPMUrl + "/api", CLIENT_ID, CLIENT_SECRET);
client = new CloudpivotOpenClient(config, new JdkHttpClient());
}
}
}
return client;
}
}

View File

@ -3,6 +3,10 @@ package com.chint;
import cn.hutool.core.lang.hash.Hash;
import com.alibaba.fastjson.JSON;
import com.authine.cloudpivot.opensdk.ApiException;
import com.authine.cloudpivot.opensdk.CloudpivotOpenClient;
import com.authine.cloudpivot.opensdk.model.request.workflow.StartWorkflowRequest;
import com.authine.cloudpivot.opensdk.model.response.workflow.StartWorkflowResponse;
import com.chint.domain.aggregates.user.User;
import com.chint.infrastructure.constant.LYConstant;
import com.chint.infrastructure.util.BaseContext;
@ -413,40 +417,40 @@ public class LYTest {
*/
@Test
public void testDemo2() throws Exception {
// XNTokenDto xnTokenDto = httpPostRequest.get(XNBPMUrl + XNBPM_TOKEN_URL + "?code=" + "191107079", XNTokenDto.class);
// if (!"0".equals(xnTokenDto.getErrcode())) {
// throw new RuntimeException("用户不存在!");
// }
// String userId = xnTokenDto.getUser_id();
// CloudpivotOpenClient client = ClientFactory.getInstance();
// StartWorkflowRequest request = new StartWorkflowRequest();
// Gson gson = new Gson();
// RescheduleDto rescheduleDto = new RescheduleDto();
// rescheduleDto.setOrderType("机票改签")//内容选项机票改签机票退票火车票改签火车票退票
// .setOrderSource("携程商旅")//携程商旅/同程商旅
// .setOrderNo("00002")//订单号
// .setStartTime("2024-02-22 10:00:00")//机票改签或火车票改签提供: 原时间
// .setRebookStartTime("2024-02-23 10:00:00")//机票改签或火车票改签提供: 改签后时间
// .setTrainNumber("")//火车票改签提供: 原车次
// .setSeatingStandard("")//火车票改签提供: 原席别
// .setRebookTrainNumber("")//火车票改签提供: 改签后车次
// .setRebookSeatingStandard("")//火车票改签提供: 改签后席别
// .setFee(BigDecimal.valueOf(100))//费用
// .setReason("行程冲突");//原因
// String entityParamValues = gson.toJson(rescheduleDto);
// Type type = new TypeToken<HashMap<String, Object>>(){}.getType();
// HashMap<String, Object> map = gson.fromJson(entityParamValues, type);
// request.setData(map);//数据
// request.setDepartmentId("");//部门id默认主部门
// request.setFinishStart(true);//发起流程
// request.setUserId(userId);//员工号
// request.setWorkflowCode("JG_AS_CLGQSQ");//改签流程
// try {
// StartWorkflowResponse response = client.startWorkflow(request);
// System.out.println("response = " + JSON.toJSONString(response));
// } catch (ApiException e) {
// throw new RuntimeException(e.getMessage());
// }
XNTokenDto xnTokenDto = httpPostRequest.get(XNBPMUrl + XNBPM_TOKEN_URL + "?code=" + "191107079", XNTokenDto.class);
if (!"0".equals(xnTokenDto.getErrcode())) {
throw new RuntimeException("用户不存在!");
}
String userId = xnTokenDto.getUser_id();
CloudpivotOpenClient client = ClientFactory.getInstance();
StartWorkflowRequest request = new StartWorkflowRequest();
Gson gson = new Gson();
RescheduleDto rescheduleDto = new RescheduleDto();
rescheduleDto.setOrderType("机票改签")//内容选项机票改签机票退票火车票改签火车票退票
.setOrderSource("携程商旅")//携程商旅/同程商旅
.setOrderNo("00002")//订单号
.setStartTime("2024-02-22 10:00:00")//机票改签或火车票改签提供: 原时间
.setRebookStartTime("2024-02-23 10:00:00")//机票改签或火车票改签提供: 改签后时间
.setTrainNumber("")//火车票改签提供: 原车次
.setSeatingStandard("")//火车票改签提供: 原席别
.setRebookTrainNumber("")//火车票改签提供: 改签后车次
.setRebookSeatingStandard("")//火车票改签提供: 改签后席别
.setFee(BigDecimal.valueOf(100))//费用
.setReason("行程冲突");//原因
String entityParamValues = gson.toJson(rescheduleDto);
Type type = new TypeToken<HashMap<String, Object>>(){}.getType();
HashMap<String, Object> map = gson.fromJson(entityParamValues, type);
request.setData(map);//数据
request.setDepartmentId("");//部门id默认主部门
request.setFinishStart(true);//发起流程
request.setUserId(userId);//员工号
request.setWorkflowCode("JG_AS_CLGQSQ");//改签流程
try {
StartWorkflowResponse response = client.startWorkflow(request);
System.out.println("response = " + JSON.toJSONString(response));
} catch (ApiException e) {
throw new RuntimeException(e.getMessage());
}
}
}